[INFO] cloning repository https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftech-and-finance%2FArbitraggioTriangolare-Rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftech-and-finance%2FArbitraggioTriangolare-Rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 5a2649593bd69d210be9f6c3644bf2c8a802b719
[INFO] checking tech-and-finance/ArbitraggioTriangolare-Rust against try#8ac0915e346f9a2e49ca3951b642c55bd7d1eaab for pr-158447
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftech-and-finance%2FArbitraggioTriangolare-Rust" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust
[INFO] finished tweaking git repo https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust
[INFO] tweaked toml for git repo https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust on toolchain 8ac0915e346f9a2e49ca3951b642c55bd7d1eaab
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8ac0915e346f9a2e49ca3951b642c55bd7d1eaab" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/tech-and-finance/ArbitraggioTriangolare-Rust already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8ac0915e346f9a2e49ca3951b642c55bd7d1eaab" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded halfbrown v0.2.5
[INFO] [stderr]   Downloaded rust_decimal_macros v1.40.0
[INFO] [stderr]   Downloaded value-trait v0.10.1
[INFO] [stderr]   Downloaded core_affinity v0.8.3
[INFO] [stderr]   Downloaded fastwebsockets v0.10.0
[INFO] [stderr]   Downloaded simd-json v0.14.3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3a6becf2bc8dde7f3fa57ede90e4f284e72d296796fc446bbb1e2c7cc0530151" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db
[INFO] running `Command { std: "docker" "start" "e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db" "/opt/rustwide/cargo-home/bin/cargo" "+8ac0915e346f9a2e49ca3951b642c55bd7d1eaab" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db" "/opt/rustwide/cargo-home/bin/cargo" "+8ac0915e346f9a2e49ca3951b642c55bd7d1eaab" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking zerocopy v0.8.48
[INFO] [stderr]     Checking tokio v1.52.3
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking futures-task v0.3.32
[INFO] [stderr]     Checking zerofrom v0.1.7
[INFO] [stderr]     Checking typenum v1.20.0
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking rustix v1.1.4
[INFO] [stderr]    Compiling libmimalloc-sys v0.1.47
[INFO] [stderr]     Checking float-cmp v0.10.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.12
[INFO] [stderr]     Checking ciborium-io v0.2.2
[INFO] [stderr]     Checking simdutf8 v0.1.5
[INFO] [stderr]     Checking yoke v0.8.2
[INFO] [stderr]     Checking num-conv v0.2.1
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking itertools v0.10.5
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking zerovec v0.11.6
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking wait-timeout v0.2.1
[INFO] [stderr]     Checking time v0.3.47
[INFO] [stderr]     Checking symlink v0.1.0
[INFO] [stderr]     Checking utf-8 v0.7.6
[INFO] [stderr]     Checking cast v0.3.0
[INFO] [stderr]     Checking quick-error v1.2.3
[INFO] [stderr]     Checking bit-vec v0.8.0
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]     Checking core_affinity v0.8.3
[INFO] [stderr]     Checking rayon v1.12.0
[INFO] [stderr]     Checking bit-set v0.8.0
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking potential_utf v0.1.5
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking tracing-serde v0.2.0
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking tinytemplate v1.2.1
[INFO] [stderr]     Checking criterion-plot v0.5.0
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking pin-project v1.1.12
[INFO] [stderr]     Checking rust_decimal v1.42.0
[INFO] [stderr]     Checking plotters v0.3.7
[INFO] [stderr]     Checking rand v0.9.4
[INFO] [stderr]     Checking rand_xorshift v0.4.0
[INFO] [stderr]    Compiling rust_decimal_macros v1.40.0
[INFO] [stderr]     Checking console v0.16.3
[INFO] [stderr]     Checking mimalloc v0.1.50
[INFO] [stderr]     Checking is-terminal v0.4.17
[INFO] [stderr]     Checking similar v2.7.0
[INFO] [stderr]     Checking oorandom v11.1.5
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking anes v0.1.6
[INFO] [stderr]     Checking unarray v0.1.4
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking rusty-fork v0.3.1
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]     Checking insta v1.47.2
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking rustls-webpki v0.103.13
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking tracing-appender v0.2.5
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking tower-http v0.6.10
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking ciborium-ll v0.2.2
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking ciborium v0.2.2
[INFO] [stderr]     Checking h2 v0.4.14
[INFO] [stderr]     Checking proptest v1.11.0
[INFO] [stderr]     Checking rand v0.8.6
[INFO] [stderr]     Checking halfbrown v0.2.5
[INFO] [stderr]     Checking value-trait v0.10.1
[INFO] [stderr]     Checking criterion v0.5.1
[INFO] [stderr]     Checking simd-json v0.14.3
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking hyper v1.9.0
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking hyper-rustls v0.27.9
[INFO] [stderr]     Checking fastwebsockets v0.10.0
[INFO] [stderr]     Checking reqwest v0.12.28
[INFO] [stderr]     Checking arbitraggio-triangolare-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> benches/../src/signing.rs:101:9
[INFO] [stdout]     |
[INFO] [stdout] 101 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> tests/../src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BookTickerUpdate` and `parse_bookticker_frame`
[INFO] [stdout]   --> tests/../src/ws_connection.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     parse_bookticker_frame, parse_bookticker_frame_with_symbol, BookTickerUpdate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                                      ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BookTickerUpdate`
[INFO] [stdout]   --> tests/../src/producer.rs:36:57
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::bookticker::{parse_bookticker_rest_snapshot, BookTickerUpdate, FrameMessage};
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> benches/../src/fixed8.rs:308:9
[INFO] [stdout]     |
[INFO] [stdout] 308 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]    --> benches/../src/fixed8.rs:309:9
[INFO] [stdout]     |
[INFO] [stdout] 309 |     use std::str::FromStr;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> benches/../src/exchange_info.rs:138:9
[INFO] [stdout]     |
[INFO] [stdout] 138 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> benches/../src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> benches/../src/symbol_info.rs:148:9
[INFO] [stdout]     |
[INFO] [stdout] 148 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> benches/../src/triangle_index.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `build_existing_pairs`
[INFO] [stdout]    --> benches/../src/triangle_index.rs:198:30
[INFO] [stdout]     |
[INFO] [stdout] 198 |     use crate::symbol_info::{build_existing_pairs, SymbolUniverse};
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> benches/../src/orderbook.rs:391:9
[INFO] [stdout]     |
[INFO] [stdout] 391 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]    --> benches/../src/orderbook.rs:392:9
[INFO] [stdout]     |
[INFO] [stdout] 392 |     use std::str::FromStr;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]    --> benches/../src/orderbook.rs:393:9
[INFO] [stdout]     |
[INFO] [stdout] 393 |     use std::sync::Arc;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::atomic::AtomicBool`
[INFO] [stdout]    --> benches/../src/orderbook.rs:394:9
[INFO] [stdout]     |
[INFO] [stdout] 394 |     use std::sync::atomic::AtomicBool;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]    --> benches/../src/orderbook.rs:395:9
[INFO] [stdout]     |
[INFO] [stdout] 395 |     use std::thread;
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]    --> benches/../src/orderbook.rs:396:9
[INFO] [stdout]     |
[INFO] [stdout] 396 |     use std::time::Duration;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> tests/../src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BookTickerUpdate` and `parse_bookticker_frame`
[INFO] [stdout]   --> tests/../src/ws_connection.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     parse_bookticker_frame, parse_bookticker_frame_with_symbol, BookTickerUpdate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                                      ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> tests/../src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> benches/../src/error.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 14 |     Parse(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     WebSocket(String),
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Order(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     Overflow,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     InsufficientLiquidity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     BelowMinQty,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     BelowMinNotional,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]    --> src/order_client.rs:424:5
[INFO] [stdout]     |
[INFO] [stdout] 424 | use std::str::FromStr;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BookTickerUpdate`
[INFO] [stdout]   --> src/producer.rs:36:57
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::bookticker::{parse_bookticker_rest_snapshot, BookTickerUpdate, FrameMessage};
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BookTickerUpdate` and `parse_bookticker_frame`
[INFO] [stdout]   --> src/ws_connection.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     parse_bookticker_frame, parse_bookticker_frame_with_symbol, BookTickerUpdate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                                      ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]   --> src/main.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | use std::str::FromStr;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::ws_order_client`
[INFO] [stdout]   --> tests/../src/trade_executor.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | use crate::ws_order_client::WsOrderClient;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^ could not find `ws_order_client` in the crate root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BookTickerUpdate`
[INFO] [stdout]   --> src/producer.rs:36:57
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::bookticker::{parse_bookticker_rest_snapshot, BookTickerUpdate, FrameMessage};
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BookTickerUpdate` and `parse_bookticker_frame`
[INFO] [stdout]   --> src/ws_connection.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     parse_bookticker_frame, parse_bookticker_frame_with_symbol, BookTickerUpdate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                                      ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::FromStr`
[INFO] [stdout]   --> src/main.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | use std::str::FromStr;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::AppResult`
[INFO] [stdout]  --> tests/../src/symbol_info.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::AppResult;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BookTickerUpdate` and `parse_bookticker_frame`
[INFO] [stdout]   --> tests/../src/ws_connection.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     parse_bookticker_frame, parse_bookticker_frame_with_symbol, BookTickerUpdate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^                                      ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BookTickerUpdate`
[INFO] [stdout]   --> tests/../src/producer.rs:36:57
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::bookticker::{parse_bookticker_rest_snapshot, BookTickerUpdate, FrameMessage};
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> benches/../src/error.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 10 |     #[error("Config error: {0}")]
[INFO] [stdout] 11 |     Config(String),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     WebSocket(String),
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Order(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     Overflow,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     InsufficientLiquidity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     BelowMinQty,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     BelowMinNotional,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> benches/../src/fixed8.rs:43:15
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl Fixed8 {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  43 |     pub const ZERO: Fixed8 = Fixed8(0);
[INFO] [stdout]     |               ^^^^
[INFO] [stdout]  44 |     pub const ONE: Fixed8 = Fixed8(SCALE);
[INFO] [stdout]     |               ^^^
[INFO] [stdout]  45 |     pub const MAX: Fixed8 = Fixed8(i64::MAX);
[INFO] [stdout]     |               ^^^
[INFO] [stdout]  46 |     pub const MIN: Fixed8 = Fixed8(i64::MIN);
[INFO] [stdout]     |               ^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn from_int(n: i64) -> AppResult<Self> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub const fn is_zero(self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub const fn is_positive(self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub const fn is_negative(self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn truncate_to_step(self, step: Fixed8) -> AppResult<Fixed8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_string_trimmed` is never used
[INFO] [stdout]    --> benches/../src/fixed8.rs:298:12
[INFO] [stdout]     |
[INFO] [stdout] 291 | impl Fixed8 {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn to_string_trimmed(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_qty` is never read
[INFO] [stdout]   --> benches/../src/exchange_info.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     LotSize {
[INFO] [stdout]    |     ------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 46 |         max_qty: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_min_to_market` is never read
[INFO] [stdout]   --> benches/../src/exchange_info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 51 |     Notional {
[INFO] [stdout]    |     -------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 55 |         apply_min_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_to_market` is never read
[INFO] [stdout]   --> benches/../src/exchange_info.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |     MinNotional {
[INFO] [stdout]    |     ----------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 63 |         apply_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_price` and `max_price` are never read
[INFO] [stdout]   --> benches/../src/exchange_info.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     PriceFilter {
[INFO] [stdout]    |     ----------- fields in this variant
[INFO] [stdout] 67 |         #[serde(rename = "minPrice")]
[INFO] [stdout] 68 |         min_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 69 |         #[serde(rename = "maxPrice")]
[INFO] [stdout] 70 |         max_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixture_btcusdt` is never used
[INFO] [stdout]    --> benches/../src/exchange_info.rs:142:8
[INFO] [stdout]     |
[INFO] [stdout] 142 |     fn fixture_btcusdt() -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixture_legacy_min_notional` is never used
[INFO] [stdout]    --> benches/../src/exchange_info.rs:177:8
[INFO] [stdout]     |
[INFO] [stdout] 177 |     fn fixture_legacy_min_notional() -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixture_halted` is never used
[INFO] [stdout]    --> benches/../src/exchange_info.rs:206:8
[INFO] [stdout]     |
[INFO] [stdout] 206 |     fn fixture_halted() -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_qty`, `step_size`, `min_notional`, and `tick_size` are never read
[INFO] [stdout]   --> benches/../src/symbol_info.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct SymbolInfo {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub min_qty: Fixed8,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 30 |     pub step_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 31 |     pub min_notional: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub tick_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SymbolInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `lookup_symbol` and `find_pair` are never used
[INFO] [stdout]    --> benches/../src/symbol_info.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout]  51 | impl SymbolUniverse {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn lookup_symbol(&self, name: &str) -> Option<&SymbolInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn find_pair(&self, base: AssetId, quote: AssetId) -> Option<SymbolId> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixture_three_pairs` is never used
[INFO] [stdout]    --> benches/../src/symbol_info.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 |     fn fixture_three_pairs() -> ExchangeInfo {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `triangles_by_symbol` and `start_assets` are never read
[INFO] [stdout]   --> benches/../src/triangle_index.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct TriangleIndex {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub triangles_by_symbol: Vec<Vec<TriangleId>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     /// Distinct start-assets across all triangles (e.g. {USDT, USDC, BTC, ETH}).
[INFO] [stdout] 78 |     pub start_assets: Vec<AssetId>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TriangleIndex` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `triangles_for_symbol` is never used
[INFO] [stdout]    --> benches/../src/triangle_index.rs:189:12
[INFO] [stdout]     |
[INFO] [stdout]  81 | impl TriangleIndex {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn triangles_for_symbol(&self, symbol_id: SymbolId) -> &[TriangleId] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_universe_with_pairs` is never used
[INFO] [stdout]    --> benches/../src/triangle_index.rs:200:8
[INFO] [stdout]     |
[INFO] [stdout] 200 |     fn build_universe_with_pairs(pairs: &[(&str, &str, &str)]) -> SymbolUniverse {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `write_slot_if_newer`, `read_slot`, and `orderbook` are never used
[INFO] [stdout]    --> benches/../src/orderbook.rs:84:12
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl OrderbookWriter {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn write_slot_if_newer(&mut self, id: SymbolId, snap: BookSnapshot) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn read_slot(&self, id: SymbolId) -> Option<BookSnapshot> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn orderbook(&self) -> &Arc<Orderbook> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `EMPTY` and `is_empty` are never used
[INFO] [stdout]    --> benches/../src/orderbook.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 117 | impl BookSnapshot {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 118 |     pub const EMPTY: BookSnapshot = BookSnapshot {
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `invalid` and `qty_cap_consecutive` are never read
[INFO] [stdout]    --> benches/../src/orderbook.rs:144:5
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct OrderbookSlot {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 144 |     invalid: AtomicBool,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     qty_cap_consecutive: std::sync::atomic::AtomicU8,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OrderbookSlot` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> benches/../src/orderbook.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Orderbook {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn mark_invalid(&self, id: SymbolId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn clear_invalid(&self, id: SymbolId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn is_invalid(&self, id: SymbolId) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn bump_qty_cap(&self, id: SymbolId, threshold: u8) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn reset_qty_cap(&self, id: SymbolId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn invalid_symbol_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `eth`
[INFO] [stdout]    --> tests/../src/symbol_info.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let eth = uni.asset_name_to_id["ETH"];
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_eth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `eth`
[INFO] [stdout]    --> tests/../src/symbol_info.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let eth = uni.asset_name_to_id["ETH"];
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_eth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Overflow`, `InsufficientLiquidity`, `BelowMinQty`, and `BelowMinNotional` are never constructed
[INFO] [stdout]   --> tests/../src/error.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 23 |     Overflow,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     InsufficientLiquidity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     BelowMinQty,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     BelowMinNotional,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_int`, `is_zero`, `is_positive`, and `is_negative` are never used
[INFO] [stdout]   --> tests/../src/fixed8.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl Fixed8 {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn from_int(n: i64) -> AppResult<Self> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub const fn is_zero(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub const fn is_positive(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub const fn is_negative(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_qty` is never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     LotSize {
[INFO] [stdout]    |     ------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 46 |         max_qty: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_min_to_market` is never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 51 |     Notional {
[INFO] [stdout]    |     -------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 55 |         apply_min_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_to_market` is never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |     MinNotional {
[INFO] [stdout]    |     ----------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 63 |         apply_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_price` and `max_price` are never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     PriceFilter {
[INFO] [stdout]    |     ----------- fields in this variant
[INFO] [stdout] 67 |         #[serde(rename = "minPrice")]
[INFO] [stdout] 68 |         min_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 69 |         #[serde(rename = "maxPrice")]
[INFO] [stdout] 70 |         max_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_qty`, `step_size`, `min_notional`, and `tick_size` are never read
[INFO] [stdout]   --> tests/../src/symbol_info.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct SymbolInfo {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub min_qty: Fixed8,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 30 |     pub step_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 31 |     pub min_notional: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub tick_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SymbolInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_pair` is never used
[INFO] [stdout]    --> tests/../src/symbol_info.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout]  51 | impl SymbolUniverse {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn find_pair(&self, base: AssetId, quote: AssetId) -> Option<SymbolId> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_assets` is never read
[INFO] [stdout]   --> tests/../src/triangle_index.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct TriangleIndex {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub start_assets: Vec<AssetId>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TriangleIndex` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `write_slot`, `read_slot`, and `orderbook` are never used
[INFO] [stdout]    --> tests/../src/orderbook.rs:64:12
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl OrderbookWriter {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout]  63 |     /// Atomic seqlock write. Safe by construction — only one writer can exist.
[INFO] [stdout]  64 |     pub fn write_slot(&mut self, id: SymbolId, snap: BookSnapshot) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn read_slot(&self, id: SymbolId) -> Option<BookSnapshot> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn orderbook(&self) -> &Arc<Orderbook> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `EMPTY` and `is_empty` are never used
[INFO] [stdout]    --> tests/../src/orderbook.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 117 | impl BookSnapshot {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 118 |     pub const EMPTY: BookSnapshot = BookSnapshot {
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_invalid`, `invalid_symbol_count`, and `is_empty` are never used
[INFO] [stdout]    --> tests/../src/orderbook.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Orderbook {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn is_invalid(&self, id: SymbolId) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn invalid_symbol_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `qty_capped_count` is never used
[INFO] [stdout]   --> tests/../src/bookticker.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn qty_capped_count() -> u64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_websocket_loop` is never used
[INFO] [stdout]    --> tests/../src/ws_connection.rs:124:14
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub async fn run_websocket_loop(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `thread_handle` and `shutdown_signal` are never read
[INFO] [stdout]   --> tests/../src/producer.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ProducerHandle {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 63 |     pub trigger_rx: Receiver<SymbolId>,
[INFO] [stdout] 64 |     pub thread_handle: std::thread::JoinHandle<AppResult<()>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub shutdown_signal: Arc<AtomicBool>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `shutdown` is never used
[INFO] [stdout]   --> tests/../src/producer.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl ProducerHandle {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn shutdown(&self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_inflight_counter` is never used
[INFO] [stdout]    --> tests/../src/producer.rs:345:8
[INFO] [stdout]     |
[INFO] [stdout] 345 | pub fn register_inflight_counter(counter: Arc<std::sync::atomic::AtomicU32>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> tests/ws_live_smoke.rs:61:51
[INFO] [stdout]     |
[INFO] [stdout]  61 |         let _ = run_websocket_loop(host, streams, tx).await;
[INFO] [stdout]     |                 ------------------                ^^ expected `Sender<FrameMessage>`, found `Sender<BookTickerUpdate>`
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `crossbeam_channel::Sender<FrameMessage>`
[INFO] [stdout]                found struct `crossbeam_channel::Sender<BookTickerUpdate>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> tests/../src/ws_connection.rs:124:14
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub async fn run_websocket_loop(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     tx: Sender<FrameMessage>,
[INFO] [stdout]     |     ------------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> tests/../src/error.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 10 |     #[error("Config error: {0}")]
[INFO] [stdout] 11 |     Config(String),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     WebSocket(String),
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Order(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     Overflow,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     InsufficientLiquidity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     BelowMinQty,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     BelowMinNotional,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_int`, `is_zero`, `is_positive`, and `is_negative` are never used
[INFO] [stdout]   --> tests/../src/fixed8.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl Fixed8 {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn from_int(n: i64) -> AppResult<Self> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub const fn is_zero(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub const fn is_positive(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub const fn is_negative(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_qty` is never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     LotSize {
[INFO] [stdout]    |     ------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 46 |         max_qty: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_min_to_market` is never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 51 |     Notional {
[INFO] [stdout]    |     -------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 55 |         apply_min_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_to_market` is never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |     MinNotional {
[INFO] [stdout]    |     ----------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 63 |         apply_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_price` and `max_price` are never read
[INFO] [stdout]   --> tests/../src/exchange_info.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     PriceFilter {
[INFO] [stdout]    |     ----------- fields in this variant
[INFO] [stdout] 67 |         #[serde(rename = "minPrice")]
[INFO] [stdout] 68 |         min_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 69 |         #[serde(rename = "maxPrice")]
[INFO] [stdout] 70 |         max_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_qty`, `step_size`, `min_notional`, and `tick_size` are never read
[INFO] [stdout]   --> tests/../src/symbol_info.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct SymbolInfo {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub min_qty: Fixed8,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 30 |     pub step_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 31 |     pub min_notional: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub tick_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SymbolInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_pair` is never used
[INFO] [stdout]    --> tests/../src/symbol_info.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout]  51 | impl SymbolUniverse {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn find_pair(&self, base: AssetId, quote: AssetId) -> Option<SymbolId> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_assets` is never read
[INFO] [stdout]   --> tests/../src/triangle_index.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct TriangleIndex {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub start_assets: Vec<AssetId>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TriangleIndex` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `eth`
[INFO] [stdout]    --> tests/../src/symbol_info.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let eth = uni.asset_name_to_id["ETH"];
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_eth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitraggio-triangolare-rust` (test "ws_live_smoke") due to 1 previous error; 3 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error[E0063]: missing field `opp_raw_tx` in initializer of `ConsumerConfig`
[INFO] [stdout]    --> tests/end_to_end_smoke.rs:129:42
[INFO] [stdout]     |
[INFO] [stdout] 129 |     let consumer_handle = start_consumer(ConsumerConfig {
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^ missing `opp_raw_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0063]: missing fields `order_transport` and `ws_order_client` in initializer of `TradeExecutorConfig`
[INFO] [stdout]    --> tests/end_to_end_smoke.rs:151:54
[INFO] [stdout]     |
[INFO] [stdout] 151 |     let trade_executor = Arc::new(TradeExecutor::new(TradeExecutorConfig {
[INFO] [stdout]     |                                                      ^^^^^^^^^^^^^^^^^^^ missing `order_transport` and `ws_order_client`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `eth`
[INFO] [stdout]    --> tests/../src/symbol_info.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let eth = uni.asset_name_to_id["ETH"];
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_eth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0063, E0432.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0063`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `arbitraggio-triangolare-rust` (test "end_to_end_smoke") due to 3 previous errors; 4 warnings emitted
[INFO] [stdout] warning: function `parse_bookticker_frame` is never used
[INFO] [stdout]    --> src/bookticker.rs:290:8
[INFO] [stdout]     |
[INFO] [stdout] 290 | pub fn parse_bookticker_frame(buf: &mut [u8]) -> AppResult<BookTickerUpdate> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `telegram` is never read
[INFO] [stdout]   --> src/config.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Config {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub telegram: TelegramConfig,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Config` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `reconnect_initial_secs` and `reconnect_max_secs` are never read
[INFO] [stdout]   --> src/config.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct NetworkConfig {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub reconnect_initial_secs: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub reconnect_max_secs: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetworkConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `backpressure_log_sample` is never read
[INFO] [stdout]   --> src/config.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub struct RuntimeConfig {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub backpressure_log_sample: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RuntimeConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `enabled` and `cooldown_secs` are never read
[INFO] [stdout]    --> src/config.rs:98:9
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TelegramConfig {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub enabled: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub cooldown_secs: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TelegramConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InsufficientLiquidity`, `BelowMinQty`, and `BelowMinNotional` are never constructed
[INFO] [stdout]   --> src/error.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 26 |     InsufficientLiquidity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     BelowMinQty,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     BelowMinNotional,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_qty` is never read
[INFO] [stdout]   --> src/exchange_info.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     LotSize {
[INFO] [stdout]    |     ------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 46 |         max_qty: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_min_to_market` is never read
[INFO] [stdout]   --> src/exchange_info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 51 |     Notional {
[INFO] [stdout]    |     -------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 55 |         apply_min_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_to_market` is never read
[INFO] [stdout]   --> src/exchange_info.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |     MinNotional {
[INFO] [stdout]    |     ----------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 63 |         apply_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_price` and `max_price` are never read
[INFO] [stdout]   --> src/exchange_info.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     PriceFilter {
[INFO] [stdout]    |     ----------- fields in this variant
[INFO] [stdout] 67 |         #[serde(rename = "minPrice")]
[INFO] [stdout] 68 |         min_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 69 |         #[serde(rename = "maxPrice")]
[INFO] [stdout] 70 |         max_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `MIN`, `is_positive`, and `is_negative` are never used
[INFO] [stdout]   --> src/fixed8.rs:46:15
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl Fixed8 {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub const MIN: Fixed8 = Fixed8(i64::MIN);
[INFO] [stdout]    |               ^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub const fn is_positive(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub const fn is_negative(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_insufficient_balance`, `is_invalid_timestamp`, and `is_lot_size_violation` are never used
[INFO] [stdout]    --> src/order_client.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | impl BinanceError {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 206 |     /// `-2010 NEW_ORDER_REJECTED` (most common in arb: insufficient balance).
[INFO] [stdout] 207 |     pub fn is_insufficient_balance(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn is_invalid_timestamp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn is_lot_size_violation(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `symbol`, `order_id`, `client_order_id`, `side`, `order_type`, and `fills` are never read
[INFO] [stdout]    --> src/order_client.rs:234:9
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct OrderResponse {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 234 |     pub symbol: String,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 235 |     pub order_id: u64,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 236 |     pub client_order_id: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub side: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 244 |     #[serde(rename = "type")]
[INFO] [stdout] 245 |     pub order_type: String,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fills: Vec<Fill>,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OrderResponse` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `price`, `qty`, `commission`, and `commission_asset` are never read
[INFO] [stdout]    --> src/order_client.rs:254:9
[INFO] [stdout]     |
[INFO] [stdout] 253 | pub struct Fill {
[INFO] [stdout]     |            ---- fields in this struct
[INFO] [stdout] 254 |     pub price: String,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 255 |     pub qty: String,
[INFO] [stdout]     |         ^^^
[INFO] [stdout] 256 |     pub commission: String,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 257 |     pub commission_asset: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Fill` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_partial` is never used
[INFO] [stdout]    --> src/order_client.rs:264:12
[INFO] [stdout]     |
[INFO] [stdout] 260 | impl OrderResponse {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn is_partial(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `write_slot`, `read_slot`, and `orderbook` are never used
[INFO] [stdout]    --> src/orderbook.rs:64:12
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl OrderbookWriter {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout]  63 |     /// Atomic seqlock write. Safe by construction — only one writer can exist.
[INFO] [stdout]  64 |     pub fn write_slot(&mut self, id: SymbolId, snap: BookSnapshot) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn read_slot(&self, id: SymbolId) -> Option<BookSnapshot> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn orderbook(&self) -> &Arc<Orderbook> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `EMPTY` and `is_empty` are never used
[INFO] [stdout]    --> src/orderbook.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 117 | impl BookSnapshot {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 118 |     pub const EMPTY: BookSnapshot = BookSnapshot {
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `is_empty` are never used
[INFO] [stdout]    --> src/orderbook.rs:280:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Orderbook {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `shutdown` is never used
[INFO] [stdout]   --> src/producer.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl ProducerHandle {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn shutdown(&self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tick_size` is never read
[INFO] [stdout]   --> src/symbol_info.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct SymbolInfo {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub tick_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SymbolInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `lookup_symbol` is never used
[INFO] [stdout]    --> src/symbol_info.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout]  51 | impl SymbolUniverse {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn lookup_symbol(&self, name: &str) -> Option<&SymbolInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `dropped_count` and `error_count` are never used
[INFO] [stdout]   --> src/telegram.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl TelegramNotifier {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn dropped_count(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn error_count(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `WebSocket` is never constructed
[INFO] [stdout]   --> src/trade_executor.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub enum OrderTransport {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 67 |     Rest,
[INFO] [stdout] 68 |     WebSocket,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OrderTransport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_assets` is never read
[INFO] [stdout]   --> src/triangle_index.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct TriangleIndex {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub start_assets: Vec<AssetId>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TriangleIndex` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_websocket_loop` is never used
[INFO] [stdout]    --> src/ws_connection.rs:124:14
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub async fn run_websocket_loop(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TokioExecutor` is never constructed
[INFO] [stdout]   --> src/ws_order_client.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct TokioExecutor;
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WS_API_HOST` is never used
[INFO] [stdout]   --> src/ws_order_client.rs:83:11
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub const WS_API_HOST: &str = "ws-api.binance.com";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WS_API_HOST_TESTNET` is never used
[INFO] [stdout]   --> src/ws_order_client.rs:85:11
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub const WS_API_HOST_TESTNET: &str = "ws-api.testnet.binance.vision";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `host` is never read
[INFO] [stdout]   --> src/ws_order_client.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 93 | struct WsInner {
[INFO] [stdout]    |        ------- field in this struct
[INFO] [stdout] 94 |     host: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `connect` are never used
[INFO] [stdout]    --> src/ws_order_client.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl WsOrderClient {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 109 |     /// Build a new client. Connection is NOT opened yet — call `connect()` first.
[INFO] [stdout] 110 |     pub fn new(host: String, api_key: String, signer: BinanceSigner) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub async fn connect(&self) -> AppResult<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_id_from_payload` is never used
[INFO] [stdout]    --> src/ws_order_client.rs:413:4
[INFO] [stdout]     |
[INFO] [stdout] 413 | fn extract_id_from_payload(bytes: &[u8]) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SHADOW_Y_MS` is never used
[INFO] [stdout]   --> src/shadow_trader.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const SHADOW_Y_MS: u64 = 25;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `eth`
[INFO] [stdout]    --> src/symbol_info.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let eth = uni.asset_name_to_id["ETH"];
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_eth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `telegram` is never read
[INFO] [stdout]   --> src/config.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Config {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub telegram: TelegramConfig,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Config` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `reconnect_initial_secs` and `reconnect_max_secs` are never read
[INFO] [stdout]   --> src/config.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct NetworkConfig {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub reconnect_initial_secs: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub reconnect_max_secs: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetworkConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `backpressure_log_sample` is never read
[INFO] [stdout]   --> src/config.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub struct RuntimeConfig {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub backpressure_log_sample: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RuntimeConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `enabled` and `cooldown_secs` are never read
[INFO] [stdout]    --> src/config.rs:98:9
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TelegramConfig {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub enabled: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub cooldown_secs: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TelegramConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InsufficientLiquidity`, `BelowMinQty`, and `BelowMinNotional` are never constructed
[INFO] [stdout]   --> src/error.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 26 |     InsufficientLiquidity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     BelowMinQty,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     BelowMinNotional,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_qty` is never read
[INFO] [stdout]   --> src/exchange_info.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     LotSize {
[INFO] [stdout]    |     ------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 46 |         max_qty: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_min_to_market` is never read
[INFO] [stdout]   --> src/exchange_info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 51 |     Notional {
[INFO] [stdout]    |     -------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 55 |         apply_min_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `apply_to_market` is never read
[INFO] [stdout]   --> src/exchange_info.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |     MinNotional {
[INFO] [stdout]    |     ----------- field in this variant
[INFO] [stdout] ...
[INFO] [stdout] 63 |         apply_to_market: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_price` and `max_price` are never read
[INFO] [stdout]   --> src/exchange_info.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     PriceFilter {
[INFO] [stdout]    |     ----------- fields in this variant
[INFO] [stdout] 67 |         #[serde(rename = "minPrice")]
[INFO] [stdout] 68 |         min_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 69 |         #[serde(rename = "maxPrice")]
[INFO] [stdout] 70 |         max_price: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFilter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_positive` and `is_negative` are never used
[INFO] [stdout]   --> src/fixed8.rs:75:18
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl Fixed8 {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub const fn is_positive(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub const fn is_negative(self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `order_id`, `client_order_id`, `side`, and `order_type` are never read
[INFO] [stdout]    --> src/order_client.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct OrderResponse {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 234 |     pub symbol: String,
[INFO] [stdout] 235 |     pub order_id: u64,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 236 |     pub client_order_id: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 243 |     pub side: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 244 |     #[serde(rename = "type")]
[INFO] [stdout] 245 |     pub order_type: String,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `OrderResponse` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `price`, `qty`, `commission`, and `commission_asset` are never read
[INFO] [stdout]    --> src/order_client.rs:254:9
[INFO] [stdout]     |
[INFO] [stdout] 253 | pub struct Fill {
[INFO] [stdout]     |            ---- fields in this struct
[INFO] [stdout] 254 |     pub price: String,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 255 |     pub qty: String,
[INFO] [stdout]     |         ^^^
[INFO] [stdout] 256 |     pub commission: String,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 257 |     pub commission_asset: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Fill` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_partial` is never used
[INFO] [stdout]    --> src/order_client.rs:264:12
[INFO] [stdout]     |
[INFO] [stdout] 260 | impl OrderResponse {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn is_partial(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `write_slot`, `read_slot`, and `orderbook` are never used
[INFO] [stdout]    --> src/orderbook.rs:64:12
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl OrderbookWriter {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout]  63 |     /// Atomic seqlock write. Safe by construction — only one writer can exist.
[INFO] [stdout]  64 |     pub fn write_slot(&mut self, id: SymbolId, snap: BookSnapshot) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn read_slot(&self, id: SymbolId) -> Option<BookSnapshot> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn orderbook(&self) -> &Arc<Orderbook> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `EMPTY` and `is_empty` are never used
[INFO] [stdout]    --> src/orderbook.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 117 | impl BookSnapshot {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 118 |     pub const EMPTY: BookSnapshot = BookSnapshot {
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]    --> src/orderbook.rs:284:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Orderbook {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `shutdown` is never used
[INFO] [stdout]   --> src/producer.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl ProducerHandle {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn shutdown(&self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tick_size` is never read
[INFO] [stdout]   --> src/symbol_info.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct SymbolInfo {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub tick_size: Fixed8,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SymbolInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `error_count` is never used
[INFO] [stdout]   --> src/telegram.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl TelegramNotifier {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn error_count(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `WebSocket` is never constructed
[INFO] [stdout]   --> src/trade_executor.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub enum OrderTransport {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 67 |     Rest,
[INFO] [stdout] 68 |     WebSocket,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OrderTransport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_assets` is never read
[INFO] [stdout]   --> src/triangle_index.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct TriangleIndex {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub start_assets: Vec<AssetId>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TriangleIndex` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_websocket_loop` is never used
[INFO] [stdout]    --> src/ws_connection.rs:124:14
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub async fn run_websocket_loop(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TokioExecutor` is never constructed
[INFO] [stdout]   --> src/ws_order_client.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct TokioExecutor;
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WS_API_HOST` is never used
[INFO] [stdout]   --> src/ws_order_client.rs:83:11
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub const WS_API_HOST: &str = "ws-api.binance.com";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WS_API_HOST_TESTNET` is never used
[INFO] [stdout]   --> src/ws_order_client.rs:85:11
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub const WS_API_HOST_TESTNET: &str = "ws-api.testnet.binance.vision";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `host` is never read
[INFO] [stdout]   --> src/ws_order_client.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 93 | struct WsInner {
[INFO] [stdout]    |        ------- field in this struct
[INFO] [stdout] 94 |     host: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `connect` are never used
[INFO] [stdout]    --> src/ws_order_client.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl WsOrderClient {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 109 |     /// Build a new client. Connection is NOT opened yet — call `connect()` first.
[INFO] [stdout] 110 |     pub fn new(host: String, api_key: String, signer: BinanceSigner) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub async fn connect(&self) -> AppResult<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SHADOW_Y_MS` is never used
[INFO] [stdout]   --> src/shadow_trader.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const SHADOW_Y_MS: u64 = 25;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db", kill_on_drop: false }`
[INFO] [stdout] e68adc010ff973998552f6fa70dc4c2066a65329e6262c4da70caec7849c51db
